//
// DayWindow.m
// Copyright (c) 1991 by Jiro Nakamura 
// All rights reserved
//
//	by Jiro Nakamura (jiro@shaman.com)
//
// RCS Information
// Revision Number->	$Revision: 1.3 $
// Last Revised->	$Date: 91/02/17 22:03:21 $
//
static char rcsid[] = "$Id: WeekWindow.m,v 1.3 91/02/17 22:03:21 jiro Exp Locker: jiro $";

#import "Global.h"
#import "DayText.h"
#import "Event.h"
#import "cass.h"	// for TODAYICON
#import "calendar.h"	// for ascMyDate()
#import "Cassandra.h"		// For NXApp 
#import <appkit/ScrollView.h>
#import <appkit/TextField.h>
#import <appkit/PopUpList.h>
#import <appkit/Matrix.h>
#import "DayWindow.h"

#import <sys/file.h>
#import <libc.h>
#import <strings.h>



// The minimum dimensions of the day window
#define MIN_WIDTH		870.0
#define MIN_HEIGHT		100.0


@implementation DayWindow

- open:sender
{
	static alreadyInited = FALSE;
	NXRect tmpFrame;
	
	if( !alreadyInited)
		{
		alreadyInited = TRUE;
//		[self placeWindow: [[NXApp global] dayFrame]];
		today = *timeNow();
		today.tm_hour = today.tm_min = today.tm_sec = 0;
		fixTmStructure( &today);
		
		#ifdef DEBUG
			fprintf(stderr,"Today is: %s", 
				ascMyDate(&today));
		#endif
		priorityCutOff = [[NXApp global] lowPriority];
		[self	setDelegate: self];
	
		[[eventsScroll docView] getFrame: &tmpFrame];
		eventsText = [[DayText alloc] initFrame:
			&tmpFrame];	
		[eventsScroll setDocView: eventsText];
		[eventsText setMonoFont: FALSE];
		[eventsText setEditable: YES];
		[eventsText setBackgroundGray: NX_WHITE];

//		[self setMiniwindowIcon: 	DAYICON];
		
		viewPopUp = 		[PopUpList new];
		[viewPopUp	addItem:	"View All"];
		[viewPopUp	addItem:	"View Mid~High"];
		[viewPopUp	addItem:	"View Only High"];
		[[viewPopUp itemList] selectCellAt:1:0];
		NXAttachPopUpList(viewPopUpButton, viewPopUp);
		}
	[self	makeKeyAndOrderFront: self];
	[self	update];	// this will cause an update
	return self;
}

- save
{
	// This window shouldn't save itself. 
	return nil;
}

- close
{
//	[[NXApp global]	saveThisWindowPosition:	DEFAULTDAYFRAME : self];
	[super close];
	miniaturized = FALSE;
	return self;
}

- update
{
	static char temp[20];
	extern const char *shortMonths[12], *shortWeekDays[7];
	
	
	if( miniaturized || ![self isVisible])
		return self;

	sprintf(temp, "%s %s %2d, %d", 
		shortWeekDays[today.tm_wday],
		shortMonths[today.tm_mon], 
		today.tm_mday,today.tm_year + 1900);
	[dayTextField setStringValue:	temp];	

	[eventsText setDate: &today andPriority: priorityCutOff];
	[eventsText updateText];
	
	
	
	
	return self;
}

- dayBefore:sender
{		
	today.tm_mday -= 1;
	[self update];
	return self;
}

- dayAfter:sender
{
	today.tm_mday += 1;
	[self update];
	return self;
}

- dayNow:sender
{
	today = *timeNow();
	today.tm_hour = today.tm_min = today.tm_sec = 0;
	fixTmStructure( &today);
	[self update];
	return self;
}


- viewPopUpChanged:sender
{	
	switch( [[viewPopUp itemList] selectedRow])
		{
		case 2:
			priorityCutOff = [[NXApp global] highPriority];
			break;
		case 1:
			priorityCutOff = [[NXApp global] lowPriority];
			break;
		case 0:
		default:
			priorityCutOff = 0;
			break;
		}
	#ifdef DEBUG
		fprintf(stderr, "Priority changed to %d.... (tag = %d)\n",
		 	priorityCutOff, [[viewPopUp itemList] selectedRow]);
	#endif
	[self update];
	return self;
}

- windowDidMiniaturize: sender
{
	#ifdef DEBUG
		fprintf(stderr,"Today did miniaturize\n");
	#endif

	miniaturized = TRUE;
	return self;
}

- windowDidDeminiaturize: sender
{
	#ifdef DEBUG
		fprintf(stderr,"Today did deminiaturize\n");
	#endif

	miniaturized = FALSE;
	[self update];
	return self;
}

- defaultsDidChange: sender
{
	return [eventsText defaultsDidChange: sender];
}



- windowWillResize: (id) sender toSize: (NXSize *) size
{
	#ifdef DEBUG
		fprintf(stderr,"Window would have resized to %f x %f.\n", 
			size->width, size->height);
	#endif
	
	size->width = MIN_WIDTH;	// can't change the width, ever
	if( size->height < MIN_HEIGHT)
		size->height = MIN_HEIGHT;
		
	#ifdef DEBUG
		fprintf(stderr,"Window will resize to %f x %f.\n", 
			size->width, size->height);
	#endif
	return self;
}
@end
